package com.example.Service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.dto.Account;
import com.example.entity.vo.request.*;
import org.springframework.security.core.userdetails.UserDetailsService;

/**
 * 作者:xuSen
 * 日期2025/4/13 18:26
 */
public interface AccountService extends IService<Account>, UserDetailsService {
    /**
     * 根据用户名或邮箱查找账户
     * 此方法旨在通过用户名或邮箱来检索用户账户信息它主要用于认证过程或用户信息查询
     */
    Account FindByUsernameOrEmail(String username);


    /**
     * 注册邮箱验证码
     * <p>
     * 该方法用于向指定邮箱发送注册验证码根据不同类型的用户注册需求，生成并发送验证码
     * 主要解决了在用户注册过程中，如何通过邮箱验证用户身份的难题确保了用户信息的准确性和安全性
     *
     * @param type  用户类型，用于区分不同类型的用户注册，例如："注册", "更改邮箱"，“重置密码”
     * @param email 用户邮箱地址，验证码将发送到该邮箱
     * @param ip    ip地址来限制用户60秒内不能重复发送验证码
     * @return 返回操作结果的描述，例如："验证码已发送"，"验证码验证成功"等
     */
    String registerEmailVerifyCode(String type, String email, String ip);

    /**
     * 注册邮件账户
     * <p>
     * 该方法用于注册一个新的邮件账户它接受一个包含用户信息的EmailRegisterVo对象作为参数，
     * 并在系统中创建一个新的邮件账户如果注册成功，返回一个表示新账户的字符串标识；
     * 如果注册失败，则可能返回null或特定的错误信息
     *
     * @param emailRegisterVo 包含用户注册信息的对象，如用户名、密码和电子邮件地址
     * @return 如果注册成功，返回表示新账户的字符串标识；如果注册失败，返回null或错误信息
     */
    String registerEmailAccount(EmailRegisterVo emailRegisterVo);

    /**
     * 重置确认方法
     * 该方法用于处理重置过程中的确认操作，具体逻辑取决于实现
     *
     * @param confirmResetVO 包含重置确认所需信息的视图对象
     * @return 返回重置确认的结果，具体格式和内容取决于实现
     */
    String resetConfirm(ConfirmResetVO confirmResetVO);

    /**
     * 重置邮箱账户密码
     * 该方法用于处理通过邮箱重置密码的请求，具体逻辑包括验证邮箱的有效性、生成新密码等
     *
     * @param emailResetVO 包含邮箱注册信息的视图对象，用于邮箱验证和密码重置
     * @return 返回重置密码的结果，通常包括成功或失败的提示信息
     */
    String resetEmailAccountPassword(EmailResetVO emailResetVO);

    /**
     * 根据账户ID查找账户信息
     *
     * @param id 账户的唯一标识符
     * @return 返回找到的Account对象，如果没有找到则返回null
     */
    Account findAccountById(int id);
    String modifyEmail(int id, ModifyEmailVO vo);
    String changePassword(int id, ChangPasswordVO vo);

}




